説明
バグレポート
ImageCache 大きな画像
まとめ
のmaxByteSize
のImageCache
もうありません
大きな画像を収容できるように自動的に大きくなります。
コンテクスト
以前は、画像をImageCache
よりも大きいバイトサイズを持っていたImageCache
のmaxByteSize
、
flutterは永続的に増加しましたmaxByteSize
価値
それらのイメージに対応するために。
このロジックは肥大化につながることがありましたmaxByteSize
という価値観を
メモリが制限されたシステムでの作業がより困難になりました。
変更内容の説明
次の「前」と「後」の擬似コードは、次のことを示しています。
に加えられた変更ImageCache
アルゴリズム:
// Old logic pseudocode
void onLoadImage(Image image) {
if (image.byteSize > _cache.maxByteSize) {
_cache.maxByteSize = image.byteSize + 1000;
}
_cache.add(image);
while (_cache.count > _cache.maxCount
|| _cache.byteSize > _cache.maxByteSize) {
_cache.discardOldestImage();
}
}
// New logic pseudocode
void onLoadImage(Image image) {
if (image.byteSize < _cache.maxByteSize) {
_cache.add(image);
while (_cache.count > _cache.maxCount
|| _cache.byteSize > cache.maxByteSize) {
cache.discardOldestImage();
}
}
}
移行ガイド
状況が発生する可能性があります。ImageCache
以前はなかった新しいロジックでスラッシングしています。
特に、サイズより大きい画像を読み込む場合は、cache.maxByteSize
価値。
これは、次のいずれかの方法で解決できます。
- 増加
ImageCache.maxByteSize
価値 より大きな画像に対応するため。 - 画像読み込みロジックを調整して、次のことを保証します。
画像はうまく収まります
ImageCache.maxByteSize
あなたが選んだ価値観。 - サブクラス
ImageCache
、目的のロジックを実装し、 サブクラスに提供する新しいバインディングを作成します のImageCache
(を参照してください。image_cache.dart
ソース)。
タイムライン
古いアルゴリズムはサポートされなくなりました。
リリースされたバージョン: 1.16.3
安定版リリース: 1.17
参考文献
API ドキュメント:
ImageCache
関連する問題:
- 問題 45643
関連する PR:
- 大きな画像に対応するためのキャッシュ サイズの増加を停止しました
他の:
ImageCache
ソース